#include "celda.h"

#define RUNTEST(t,d) { cerr << endl << "Corriendo test " << #t << ": " << #d << endl; t(); cerr << "Terminado test " << #t << " OK!" << endl; }
#define NOROESTE 1
#define NORESTE 2
#define SUDESTE 3
#define SUDOESTE 4
void test1(){
    // chequeo de constructores , copias y asignaciones.
    Celda *celdaNula = new Celda();
    Celda celdaCopia(*celdaNula);
    Celda celdaAsignada = *celdaNula;
    assert(!celdaNula->esValida());
    assert(!celdaCopia.esValida());
    assert(!celdaAsignada.esValida());    
    delete celdaNula;
    assert(!celdaCopia.esValida());
    assert(!celdaAsignada.esValida());
    // chequeo de operadores ==
    Celda celdaVacia(0,0);
    Celda celdaVacia2(0,0);
    Celda celdaComun(0,0,1,1);
    Celda celdaEntrada(NOROESTE,0,1,0);
    Celda celdaEntrada2(SUDOESTE,0,1,0);
    Celda celdaSalida(0,NORESTE,1,0);    
    assert(celdaVacia == celdaVacia2);
    assert(celdaComun != celdaVacia);
    assert(celdaComun != celdaEntrada);
    assert(celdaComun != celdaSalida);
    assert(celdaEntrada != celdaSalida);
    assert(celdaEntrada != celdaEntrada2);
//     cout << celdaEntrada << endl;
//     cout << celdaComun << endl;
//     cout << celdaSalida << endl;
//     cout << celdaCopia << endl;
    // chequeo observadores
    //todas menos la nula son validas
    assert(!celdaCopia.esValida());
    assert(celdaVacia.esValida());
    assert(celdaComun.esValida());
    assert(celdaEntrada.esValida());
    assert(celdaSalida.esValida());
    assert(!celdaVacia.esCelda());
    assert(celdaComun.esCelda());
    assert(celdaEntrada.esCelda());
    assert(celdaSalida.esCelda());
    assert(!celdaComun.esSalida());
    assert(!celdaComun.esEntrada());
    assert(!celdaEntrada.esSalida());
    assert(celdaEntrada.esEntrada());
    assert(celdaSalida.esSalida());
    assert(!celdaSalida.esEntrada());
    assert(celdaEntrada.conexionEntrada() == NOROESTE);
    assert(celdaSalida.conexionSalida() == NORESTE);
	
}


void test2(){
}

void test3(){
    

}

void test4(){

    
}
int main(){
    RUNTEST(test1, Testeo de Celda);
    return 0;
}
